package dominio;

import java.io.Serializable;
import java.util.LinkedList;

import javax.jdo.annotations.IdGeneratorStrategy;
import javax.jdo.annotations.IdentityType;
import javax.jdo.annotations.PersistenceCapable;
import javax.jdo.annotations.Persistent;
import javax.jdo.annotations.PrimaryKey;

import com.google.appengine.api.datastore.Blob;


import persistencia.dao.ProductoDAO;


@PersistenceCapable(identityType = IdentityType.APPLICATION, detachable="true")
public class Producto implements Serializable{
	

	private static final long serialVersionUID = 1L;
	@PrimaryKey  
	@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)  
	private Long id;
	@Persistent 
	private String name;
	@Persistent
	private String descripcion;
	@Persistent
	private double precio;
	@Persistent
	private int stock;
	@Persistent 
	private Blob fileBlob;
	@Persistent
	private Long id_propietario;
	@Persistent
	private Long id_categoria;

	/* Constructor */
	public Producto(String name, String descripcion, double precio, int stock, Blob fileblob, Long id_propietario,
			Long id_categoria) {
		super();
		this.name = name;
		this.descripcion = descripcion;
		this.precio = precio;
		this.stock = stock;
		this.fileBlob = fileblob;
		this.id_propietario = id_propietario;
		this.id_categoria = id_categoria;
	}
	
	public Producto(String name, String descripcion, double precio, int stock, Long id_propietario, Long id_categoria) {
		super();
		this.name = name;
		this.descripcion = descripcion;
		this.precio = precio;
		this.stock = stock;
		this.id_propietario = id_propietario;
		this.id_categoria = id_categoria;
	}
	
	public Producto() {
		super();
	}

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
	
	public String getDescripcion() {
		return descripcion;
	}

	public void setDescripcion(String descripcion) {
		this.descripcion = descripcion;
	}

	public double getPrecio() {
		return precio;
	}

	public void setPrecio(double precio) {
		this.precio = precio;
	}

	public int getStock() {
		return stock;
	}

	public void setStock(int stock) {
		this.stock = stock;
	}
	
	
	public Blob getFileBlob() {
		return fileBlob;
	}

	public void setFileBlob(Blob fileBlob) {
		this.fileBlob = fileBlob;
	}
	
	public Long getId_propietario() {
		return id_propietario;
	}

	public void setId_propietario(Long id_propietario) {
		this.id_propietario = id_propietario;
	}
	
	

	public Long getId_categoria() {
		return id_categoria;
	}

	public void setId_categoria(Long id_categoria) {
		this.id_categoria = id_categoria;
	}

	public boolean create(boolean initOfTransaction, boolean endOfTransaction){
		return ProductoDAO.create(this, initOfTransaction, endOfTransaction);
	}

	public static Producto read(String name, boolean partOfTransaction){
		return ProductoDAO.read(name, partOfTransaction);
	}

	public static Producto read(long id, boolean partOfTransaction){
		return ProductoDAO.read(id, partOfTransaction);
	}
	
	public Producto update(Producto prod, boolean partOfTransaction){
		return ProductoDAO.update(prod, partOfTransaction);
	}
	
	public Boolean delete(boolean partOfTransaction){
		return ProductoDAO.delete(this.id, partOfTransaction);
	}
	
	public Producto read(boolean partOfTransaction){
		return ProductoDAO.read(this.id, partOfTransaction);
	}
	
	public static LinkedList<Producto> readByUserId(Long id, Boolean partOfTransaction){
		return ProductoDAO.readByUserId( id ,partOfTransaction);
	}
	
	public static LinkedList<Producto> readByCategorie(Long id, Boolean partOfTrasaction){
		return ProductoDAO.readByCategory(id, partOfTrasaction);
	}
	
}
